﻿using System;
using System.IO;
using System.Linq;
using System.Reflection;

namespace 节拍计算器2
{
    public static class 文本
    {
        public static string 应用程序名称 = "节拍计算器 2 (Beta 2)";
        public static string 初始提示 = "\ue63e 点击这里，或按任意键开始";
        public static string 初始辅助提示 = "或者点击这里选择一个音频文件";
        public static string 默认不准确提示 = "\ue63e 点按频率不稳定，当前计算结果可能不准确";
        public static string 高限不准确提示 = "\ue63e 要测量的BPM值过高，可能无法计算出正确的值";
        public static string 低限不准确提示 = "\ue63e要测量的BPM值过低，可能无法计算出正确的值";
        public static string 继续点按提示 = "\ue63e 请继续点按";
        public static string 进入节拍计算器后提示 = "\ue63e 点击此处或任意键开始计算节拍";
        public static string 初始测量提示 = "\ue63e 正在测量... 请再按{0}次";
        public static string 误差过大提示 = "\ue63e 按键频率误差过大，请继续按键以校准...";
        public static string 节拍过快提示 = "\ue63e 节拍过快，打开自动，并使用滚轮调整可提升准确性";
        public static string 节拍失误超过最大重试次数提示 = "\ue63e 完全乱套了，重新开始吧";
        public static string 自动寻拍提示 = "\ue63e 自动寻拍 | {0}/{1} （第{2}小节 第{3}拍）";
        public static string 空文本 = "";
        public static string 设置点击音效 = "\ue63e 设置在点击时播放的音效";
        public static string 停止自动寻拍按钮文本 = "\ue8e7 停止";
        public static string 开始自动寻拍按钮文本 = "\ue953 自动";
        public static string 应用程序重置按钮文本 = "\ue782 重置";
        public static string 打开参考音频按钮文本 = "\uea48 打开参考音频";
        public static string 加速按钮文本 = "+ 加速";
        public static string 减速按钮文本 = "- 减速";
        public static string 播放与暂停按钮文本 = "⏯️ 播放/暂停";
        public static string 语言 = "语言";
        public static string 本语言 = "中文简体";
        public static string 节拍类型界面文本 = "\ue62a 节拍";
        public static string 节拍类型文本帮助 = "设定节拍的类型，前一个数字为每小节拍子的数量，后一个数字为音符的时值，该调整将应用到节拍器中。";
        public static string 瞬时BPM界面文本 = "\ue60c 瞬时";
        public static string 瞬时BPM文本帮助 = "显示用户当前操作瞬间的BPM。";
        public static string BPM精度界面文本 = "\ueb48 精度";
        public static string BPM精度文本帮助 = "设定BPM精确到的小数点位数，该数值会根据节拍自适应调整，亦可手动调整。";
        public static string BPM按钮文本帮助 = "点击按钮或按键盘任意键来测量BPM，在测量成功后，此处会显示测量的BPM结果";
        public static string 小节线文本帮助 = "显示当前小节的位置";
        public static string 自动按钮文本帮助 = "开始自动寻拍（在下一拍自动）";
        public static string 重置按钮文本帮助 = "重置节拍器";
        public static string 打开参考音频文本帮助 = "打开一个用于参考的音频，辅助测量BPM。\r\n参考音频可以进行慢放、快放，节拍器将辅助用户根据音频的真实时间测量BPM";
        public static string Offset界面文本 = "\ue7c0 偏移";
        public static string Offset文本帮助 = "（仅在有参考音乐时可用）音频从开始到第一拍响起时的毫秒数";


        public static void 更新键值(string 设置键, string 设置值)
        {
            var 键 = typeof(文本).GetField(设置键, BindingFlags.Static | BindingFlags.Public);
            if (键 != null)
            {
                键.SetValue(null, 设置值);
            }
            else
            {
                日志.输出($"未找到键{设置键}");
            }
        }

        public static void 加载本地语言库()
        {
            日志.输出("准备加载本地语言库");
            try
            {
                var 语言 = System.Globalization.CultureInfo.CurrentCulture.Name;
                var 文件路径 = 语言 + ".language";
                //if (Directory.GetFiles(Directory.GetCurrentDirectory(), "*.language").Count() > 0) { 文件路径 = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.language").FirstOrDefault(); }
                if (!File.Exists(文件路径)) { 日志.输出("未找到本地语言库，加载默认语言库 - 简体中文"); return; }
                var 文件内容 = File.ReadAllLines(文件路径, System.Text.Encoding.UTF8);
                文件内容.ToList().ForEach((x) =>
                {
                    var 分隔数据 = x.Split('=');

                    if (分隔数据.Length < 2) { return; }
                    if (分隔数据[1].Contains(@"\u"))
                    {
                        分隔数据[1] = System.Text.RegularExpressions.Regex.Unescape(分隔数据[1]);
                    }
                    更新键值(分隔数据[0], 分隔数据[1]);
                });
            }
            catch (Exception ex)
            {
                日志.输出(ex.Message, "加载本地语言库失败", 日志.日志类型.错误, true);
            }
        }


    }




}
